package com.wtwd.campus.service;

import com.wtwd.campus.entity.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface AttendanceRulesService {
    /**
     * 添加规则
     * @param data
     * @return
     */
    int addAttendanceRule(AttendanceRulesVO data);

    /**
     * 根据学校id和名称查询是否重复
     * @return
     */
    boolean judgeAttendanceRuleName(String name, Integer schoolId);

    /**
     * 根据学校id获取所有的考勤规则
     * @param schoolId
     * @return
     */
    Map<String,Object> getAttendanceRulesList(Integer schoolId,Integer currPage,Integer pageSize);

    /**
     * 根据id查询一笔考勤信息
     * @param id
     * @return
     */
    AttendanceRulesVO getAttendanceRulesById(Integer id);

    /**
     * 修改考勤规则
     * @param data
     * @return
     */
    int modifyAttendanceRules(AttendanceRulesVO data);

    /**
     * 根据id删除一条考勤规则
     * @param id
     * @return
     */
    int deleteAttendanceById(Integer  id);


    /**
     * 根据学校id查询考勤设置
     * @param schoolId
     * @return
     */
    Map<String,Object>  getAttendanceSetBySchoolId(Integer schoolId,Integer currPage,Integer pageSize);

    /**
     * 根据年级id查询考勤设置
     * @param gradeId
     * @return
     */
    Map<String,Object>  getAttendanceSetByGradeId(Integer gradeId,Integer currPage,Integer pageSize);

    /**
     * 根据学校id获取未绑定考勤规则的年级信息
     * @param schoolId
     * @return
     */
    List<Map<String,Object>> getUnBindingGradeBySchoolId(Integer schoolId);

    /**
     * 根据学校id获取考勤规则信息
     * @param schoolId
     * @return
     */
    List<Map<String,Object>> getRulesBySchoolId(Integer schoolId);

    /**
     * 添加考勤规则
     * @param data
     * @return
     */
    int addAttendanceSetting(AttendanceSetting data);

    /**
     * 修改考勤规则
     * @param data
     * @return
     */
    int modifyAttendanceSetting(AttendanceSetting data);

    /**
     * 修改考勤开关
     * @param data
     * @return
     */
    int modifyAttendanceSetFlag(AttendanceSetting data);

    /**
     * 删除一笔考勤信息
     * @param id
     * @return
     */
    int deleteAttendanceSetting(Integer id);

    /**
     * 条件查询考勤记录
     */
    Map<String,Object> getAttendanceRecordList(AttendanceRecordVO data);

    /**
     * 条件查询导出考勤记录
     */
    List<ExportAttendanceRecord> getExportRecordList(AttendanceRecordVO data);

    /**
     * 批量存储考勤元数据
     * @param list
     * @return
     */
    int saveAttendanceMetaRecordList(List<Map<String,Object>>  list);


    /**
     * 查询学生是否有对应的考勤规则
     * @param weekDay
     * @param schoolId
     * @return
     */
    Map<String,Object> getRulesByCondition(Integer weekDay, Integer schoolId,Integer gradeId);

    /**
     * 根据学生id和时间查找一笔打卡记录
     * @param time
     * @param stuId
     * @return
     */
    AttendanceRecordData getAttendanceRecordByCondition(Long time, Integer stuId);

    /**
     * 批量新增考勤记录
     * @param list
     * @return
     */
    int addAttendanceRecord(List<AttendanceRecordData> list);

    /**
     * 批量修改考勤记录
     * @param list
     * @return
     */
    int modifyAttendanceRecord(List<AttendanceRecordData> list);

    /**
     * 查询今日无打卡记录的未签到学生id
     * @param week
     * @return
     */
    List<Map<String,Object>> getNoRecordStuIdList(Integer week,Integer status,Long time);

    /**
     * 查询今日有打卡记录且未签到的学生id
     * @param week
     * @return
     */
    List<Integer> getRecordStuIdList(Integer week,Integer status,Long time);

    /**
     * 查看考勤规则是否与年纪绑定了
     * @param ruleId
     * @return
     */
    int getAttendanceSetCountByRuleId(Integer ruleId);

    /**
     * 根据学生id查找推送信息
     * @param stuIdList
     * @return
     */
    List<Map<String,Object>> getPushMess(List<Integer> stuIdList);

    /**
     * 查找打卡正常的学生信息
     * @param time
     * @param status
     * @return
     */
    List<Map<String,Object>> getNormalRecordPushMess(Long time,Integer status);

    /**
     * 查找打卡迟到的学生信息
     * @param time
     * @param status
     * @return
     */
    List<Map<String,Object>> getBeLateRecordPushMess(Long time,Integer status);

    /**
     * 查找打卡早退的学生信息
     * @param time
     * @param status
     * @return
     */
    List<Map<String,Object>> getLeaveEarlyRecordPushMess(Long time,Integer status);

    /**
     * 根据班级id时间以及类型查询打卡记录
     * @param time
     * @param classId
     * @return
     */
    List<Map<String,Object>> getWxAttendanceRecordList(Integer classId,Long time,Integer type, Integer status);

    /**
     * 判断查询的日期的打卡类型是否被设置
     * @param week
     * @param classId
     * @param type
     * @return
     */
    int judgeIfSetRule(Integer week,Integer classId,Integer type);

    /**
     * 根据班级id和时间获取统计考勤信息
     * @param classId
     * @param time
     * @return
     */
    List<Map<String,Object>> getStudentAttendanceRecord(Integer classId, Long time);

    /**
     * 微信公众号查看未打卡的学生信息
     * @param time
     * @param classId
     * @return
     */
    List<Map<String,Object>> getWxUnRecordList(Long time,Integer classId,Integer type);



}
